package com.mq.service;

import com.mq.vo.QaAuditReqVO;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Service;

@Configuration
@Service
public class MQSimpleService {
	@Autowired
	RabbitTemplate rabbitTemplate;
	
	public static final String SIMPLE_MQ_NAME="my-mq-simple";
	
	//启动创建一个消息队列名称，如果不存在就创建，如已存在就不略过
	//没有这个bean如果没有这个消息队列就会报错
	@Bean
	public org.springframework.amqp.core.Queue myMqSimple(){
		   return new org.springframework.amqp.core.Queue(SIMPLE_MQ_NAME,true);
	}
	
	/**
	  *    发送一个简单消息队列,消费端只能被消息一次
	 * @param qaAuditReqVO
	 */
	public void sendSimple(QaAuditReqVO qaAuditReqVO) {
		//说明：my-mq-simple这个消息队列必须已存在，如果不存在，发送将会出现错误
		//创建该队列名称：（1）可以用注解创建 （2）在rabbitmq控制台创建，建议用第一种
		rabbitTemplate.convertAndSend(SIMPLE_MQ_NAME, qaAuditReqVO);
	}
	
	/**
	  *    接收一个简单消息队列，定义一个消息通道，这个通道必须要先创建好，不然启动就会出现错误
	 * @param qaAuditReqVO
	 */
	@RabbitListener(queues = {SIMPLE_MQ_NAME})
	public void receiveSimple(QaAuditReqVO qaAuditReqVO) {
		System.out.println("====>接收到简单消息："+qaAuditReqVO.getNo());
	}
	
	//多个消费端，就会自动变成了work模式
	@RabbitListener(queues = {SIMPLE_MQ_NAME})
	public void receiveSimple2(QaAuditReqVO qaAuditReqVO) {
		System.out.println("====>接收到简单消息2："+qaAuditReqVO.getNo());
	}
	
}
